package jmine.tec.batch.dao;

import java.util.List;

import jmine.tec.batch.domain.MPhase;
import jmine.tec.batch.domain.MProcess;
import jmine.tec.batch.domain.enumx.MPhaseSystemIdentifier;

import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import bancosys.tec.persist.dao.BeanNotFoundException;
import bancosys.tec.persist.dao.SystemEntityDAO;

/**
 * DAO de MPhase.
 */
public class MPhaseDAO extends SystemEntityDAO<MPhase, MPhaseSystemIdentifier> {

    /**
     * Busca a fase a partir do seu mnemonico.
     * 
     * @param mnemo o mnemonico
     * @return a fase.
     * @throws BeanNotFoundException quando não localizar.
     */
    public MPhase findByMnemo(String mnemo) throws BeanNotFoundException {
        Criteria crit = this.getSession().createCriteria(MPhase.class);
        crit.add(Restrictions.eq("mnemonico", mnemo));
        return this.executeSingleQuery(crit);
    }

    /**
     * Busca uma lista de MPhase's que estejam associadas ao MProcess passado no parâmetro.
     * 
     * @param process o MProcess que filtrará a query
     * @return a lista de MPhase's que estejam associadas ao MProcess passado no parâmetro.
     */
    public List<MPhase> findByMProcess(MProcess process) {
        Criteria criteria = this.createCriteria();
        criteria.createCriteria("processes").add(Restrictions.eq("id", process.getId()));
        criteria.addOrder(Order.asc("id"));
        return this.executeQuery(criteria);
    }
}
